package cn.wen.mybatis.test.dao;


import cn.wen.mybatis.framework.session.SqlSession;
import cn.wen.mybatis.framework.session.SqlSessionFactory;
import cn.wen.mybatis.test.po.User;

import java.sql.*;
import java.util.List;

/**
 * 持久层代码
 * 
 * @author think
 *
 */
public class UserDaoImpl implements UserDao {
	
	private SqlSessionFactory sqlSessionFactory;
	
	public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
		super();
		this.sqlSessionFactory = sqlSessionFactory;
	}


	public UserDaoImpl() {
	}


	@Override
	public User queryUserById(User param) {
		// 先创建SqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		// 调用SqlSession的selectOne方法
		String statementId = "test.findUserById";
		User user = sqlSession.selectOne(statementId, param);
		return user;
	}

	@Override
	public User queryUserByName(String username) {
		return null;
	}

	@Override
	public boolean insertUser(User user) {
		return false;
	}

	@Override
	public boolean updateUser(User user) {
		return false;
	}

	@Override
	public boolean deleteUser(User user) {
		return false;
	}

	@Override
	public List<User> selectAllUserByIds(List<Integer> ids) {
		return null;
	}

	@Override
	public List<User> findUserByUsername(String value) {
		return null;
	}

	@Override
	public User selectUserBySelect() {
		return null;
	}

	/**
	 * 先使用JDBC实现
	 */

	public User queryUserByJDBCId(User param) {
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet rs = null;

		User user = null;
		try {
			// 加载数据库驱动
			Class.forName("com.mysql.cj.jdbc.Driver");

			// 通过驱动管理类获取数据库链接connection = DriverManager
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis_frame?serverTimezone=UTC&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF8",
					"root", "123456");

			// 定义sql语句 ?表示占位符
			//String sql = "select * from user where id = #{id} and username = #{username}";
			String sql = "select * from user where id = ? and username = ?";

			// 获取预处理 statement
			preparedStatement = connection.prepareStatement(sql);

			// 设置参数，第一个参数为 sql 语句中参数的序号（从 1 开始），第二个参数为设置的
			preparedStatement.setInt(1, 1);
			preparedStatement.setString(2, "");

			// 向数据库发出 sql 执行查询，查询出结果集
			rs = preparedStatement.executeQuery();

			// 遍历查询结果集
			while (rs.next()) {
				user = new User();
				user.setId(rs.getInt("id"));
				user.setUsername(rs.getString("username"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 释放资源
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (preparedStatement != null) {
				try {
					preparedStatement.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (connection != null) {
				try {
					connection.close();
				} catch (SQLException e) {
				}
			}
		}
		return user;
	}

}
